/*
 【基础】最满意的方案
  题目描述
    高考结束了，同学们要开始了紧张的填写志愿的过程，大家希望找一个自己最满意的大学填报方案，请你编程帮忙实现。
    现有 m (m ≤ 100000) 所学校，每所学校预计分数线是 ai (ai ≤ 10^6)。
    有 n (n ≤ 100000) 位学生，估分分别为 bi(bi ≤ 10^6)。
    根据 n 位学生的估分情况，分别给每位学生推荐一所学校，要求学校的预计分数线和学生的估分相差最小
    （可高可低，毕竟是估分嘛），这个最小值为不满意度。
    求所有学生不满意度和的最小值。
  输入
    第一行读入两个整数 m, n。m 表示学校数，n 表示学生数。
    第二行共有 m 个数，表示 m 个学校的预计录取分数。
    第三行有 n 个数，表示 n 个学生的估分成绩。
  输出
    一行，为最小的不满度之和。（数据保证结果 <= 10^10）
  样例输入
    4 3
    513 598 567 689
    500 600 550
  样例输出
    32
*/

#include <bits/stdc++.h>

using namespace std;

int a[100005] = {}; // a[i] (i >= 1) 表示第 i 所学校的预计分数线
int x;

int main() {
    int m, n;

    cin >> m >> n;
    for (int i = 1; i <= m; i++) {
        cin >> a[i];
    }

    /* 1. 先对 m 所学校的预计分数线按从小到大的顺序进行排序 */
    sort(a + 1, a + m + 1);

    /* 2. 循环进行 n 轮处理, 计算出 n 个学生的最小不满意度之和 */
    long long num = 0;
    for (int i = 1; i <= n; i++) {
        // 针对第 i 个学生的估分成绩, 计算出其和学校分数线之间的最小差值(最小不满意度)
        cin >> x;
        if (x < a[1]) { // 学生的估分成绩 x 小于最低分数线(a[1]), 则最小差值为 a[1] - x
            num = num + a[1] - x;
        } else if (x > a[m]) { // 学生的估分成绩 x 大于最高分数线(a[m]), 则最小差值为 x - a[m]
            num = num + x - a[m];
        } else {
            /*
              思路:
                1). 如果学生的估分成绩和 m 个学校分数线都不相等, 则最小差值为如下 2 个数值之间的最小值:
                    a). "小于估分成绩的最大值" 和 "估分成绩的" 差值
                    b). "大于估分成绩的最小值" 和 "估分成绩的" 差值
                2). 否则最小差值为 0;
            */
            if (!binary_search(a + 1, a + m + 1, x)) {
                int t = lower_bound(a + 1, a + m + 1, x) - a; // 通过二分查找函数找出第一个大于等于 x 的值的下标为 t
                num = num + min(a[t] - x, x - a[t - 1]); // 最小差值为 a[t] -x 和 x - a[t - 1] 的最小值
            }
        }
    }
    cout << num;

    return 0;
}